package com.xqls.util;

import com.xqls.dal.model.Company;
import com.xqls.dal.model.CompanyExample;
import com.xqls.dal.model.DeviceSchema;
import com.xqls.dal.service.CompanyMapper;
import com.xqls.dal.service.DeviceSchemaMapper;
import com.xqls.redis.Constants;
import com.xqls.redis.RedisCache;
import com.xqls.redis.RedisKeyEnum;
import org.apache.shiro.SecurityUtils;
import org.springframework.beans.BeansException;
import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.util.StringUtils;

import java.util.List;

public class ContextUtil implements ApplicationContextAware{

    private static ApplicationContext context;
    private static   ThreadLocal<String> sessionId=new  ThreadLocal<String>();
    @Override
    public void setApplicationContext(ApplicationContext applicationContext)
            throws BeansException {
        context = applicationContext;
    }

    public static ApplicationContext getContext(){
        return context;
    }

    public static Object getBean(String beanName) {
        return context.getBean(beanName);
    }

    public static Object getBean(Class clss) {
        return context.getBean(clss);
    }

//    public static void setSessionId(String id) {
//        sessionId.set(id);
//    }





//    public static String getSessionId( ) {
//       String id=sessionId.get();
//        if(StringUtils.isEmpty(id)){
//            throw new  RuntimeException("获取浏览器sessionId异常");
//        }
//        return id;
//    }

    public  static  String  getTentNo(){
//        RedisCache<String, String>  redisCache=(RedisCache)getBean(RedisCache.class);
//        String redisKey=getSessionId()+"_tentNo";
//        String tentNo=redisCache.get(redisKey);
//        if(StringUtils.isEmpty(tentNo)){
//            String principalStr= (String) SecurityUtils.getSubject().getPrincipal();
//            redisCache.remove(RedisKeyEnum.USER_CACHE+ principalStr);
//            redisCache.remove(Constants.getRedisKey(RedisKeyEnum.USER_ROLES, principalStr));
//            redisCache.remove(Constants.getRedisKey(RedisKeyEnum.USER_PERMS, principalStr));
//            redisCache.remove(Constants.getRedisKey(RedisKeyEnum.USER_SESSION, principalStr));
//            throw new RuntimeException("租户编号获取异常");
//        }
        return (String)CustomizedPropertyPlaceholderConfigurer.getContextProperty("defaultSchema");
    }
//    public static void setTentNo( String tt) {
//        RedisCache<String, String>  redisCache=(RedisCache)getBean(RedisCache.class);
//        String redisKey=getSessionId()+"_tentNo";
//        redisCache.put(redisKey,tt);
//    }
//
//    public  static  void  remove(){
//        try {
//            RedisCache<String, String> redisCache = (RedisCache) getBean(RedisCache.class);
//            String redisKey = getSessionId() + "_tentNo";
//            redisCache.remove(redisKey);
//            sessionId.remove();
//        }catch (Exception e){
//
//        }
//    }
//    public  static  void  removeSession(){
//        try {
//            sessionId.remove();
//        }catch (Exception e){
//
//        }
//    }
//
//    public static DeviceSchema getSchemaByDeviceNo(String  deviceNo)  {
//        DeviceSchemaMapper deviceSchemaMapper=(DeviceSchemaMapper)getBean(DeviceSchemaMapper.class);
//        CompanyMapper companyMapper=(CompanyMapper)getBean(CompanyMapper.class);
//        CompanyExample example=new CompanyExample();
//        example.createCriteria().andDeviceNoEqualTo(deviceNo);
//        companyMapper.selectByExample(example);
//        return  deviceSchemaMapper.selectByPrimaryKey(deviceNo);
//
//
//
//
//    }

    public  static boolean checkAddress(String deviceNo){
        CompanyMapper companyMapper=(CompanyMapper)getBean(CompanyMapper.class);
        CompanyExample example=new CompanyExample();
        example.createCriteria().andDeviceNoEqualTo(deviceNo);
        List<Company> companies= companyMapper.selectByExample(example);
        return !(companies == null || companies.size() == 0);

    }
//
//    public static DeviceSchema checkAddress(String  deviceNo)  {
//       String deviceSchema= (String)CustomizedPropertyPlaceholderConfigurer.getContextProperty("deviceSchema");
//        ContextUtil.setSessionId(deviceNo);
//        ContextUtil.setTentNo(deviceSchema);
//        DeviceSchema deviceSchema1=null;
//        try{
//            deviceSchema1=getSchemaByDeviceNo(deviceNo);
//        }catch (Exception e){
//            throw  e;
//        }finally {
//            ContextUtil.remove();
//        }
//        return  deviceSchema1;
//
//    }




}